home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
OTPLASMA.ZIP
/
plasma.doc
< prev
Wrap
Text File
|
1996-06-20
|
6KB
|
118 lines
- THE OUTLAW TRIAD DEMO-SERIES -
────────────────────────────────■ PART VII ■───────────────────────────────────
Written by : Vulture/OT
Code in : Assembler
Topic : Plasmas
──────────────────────────────■ Introduction ■─────────────────────────────────
Welcome to the Outlaw Triad demo-series! In these series we will be talking
about programming demo-effects in either pascal or assembler. Theory behind
the effects shall be discussed while a full sourcecode is also provided.
This time a VERY wellknown type of effect is discussed and that is plasmas!
Plasmas are great for background effects. For example, when displaying some
text, you could run a plasma screen in the background. Let's see how plasma
screens are made. Enjoy!
─────────────────────────────────■ Theory ■────────────────────────────────────
Note: I know plasmas are very old and shouldn't be used too much nowadays
but I think plasmas are great for learning purposes. That's the reason why
I decided to put a plasma trainer into these series anyway.
Let's start by mentioning the diverence between 2 sorts of plasmas. Static
plasma and realtime plasma. The first variant simply creates a screen on
which pixels fluently flow into other colors. Then the palette is rotated.
Realtime plasma uses cosine values to create magnificient curves on the vga
thus being much more fun to watch than static plasma, IMHO. But, realtime
plasma is more time consuming than static plasma because each pixel on the
screen has to be refreshed each frame!
To create a plasma screen you should use an unchained tweaked vga mode.
Because every pixel on the screen is affected each frame, it is usually
best to reprogram the vga to a mode in which you have large pixels, let's
say 4x4. This will result in mode 80x50 so we only have to process 80*50=
4000 pixels each frame. Also create a good palette. The colors should run
smoothly from one to the other.
To create realtime plasma, we need cosine values. Why? Because cosine values
represent a nice curve and that's what we want, nice curves. Take a look at
the source to see a good cosine chart. Oh, that chart was generated by Jare/
VangelisTeam (always give credit where credit is due), but it's pretty easy
to generate your own charts. The values in this example range from 0 to 64
but of course you can go and experiment with other values/ranges. The range
in this example is pretty clever. Think about it! When you add 4 cosine
values in range 0..64, the maximum value you can get is 4*64=256. And that's
the exact amount of colors we have to our disposal in plain mode 13h.
In this example I only used 128 colors. The cosine values go up to 64 so I
had to implement code to handle additions above 128.
Anyway, now we have setup our vga and created a good cosine chart. Let's go
and code the plasma. We want complex curves on the screen. To create plasma
screens, we simply add 4 cosine values and put the resulting value on the
vga. We use 2 cosine values for vertical movement and 2 for the horizontal
movement. For each frame we use 4 pointers to the cosine chart. For each
horizontal pixel, we update our 2 horizontal cosine pointers to point to
another cosine value in the chart! For each horizontal line we go down we
update our 2 vertical pointers. When updating the pointers, don't save the
new values to the pointer variables but into temporary variables (in asm I
just used some registers). We update the original pointers when we've done
the entire screen (frame). Complex? Observe this:
- Set vertical cosine start values (save into temp variables)
- Go into vertical loop (50 times in this example)
- Set horizontal cosine start values (save into temp variables)
- Go into horizontal loop (80 times in this example)
- Add 4 temporary cosine values
- Put result on vga
- Update the temporary horizontal cosine values
- End horizontal loop
- Update the temporary vertical cosine values
- End vertical loop
- Update the original cosine start values
- Back to start
Just take a look at the source to see what I mean. Go and change some of the
values and see what happens. Also, try to implement this in hi-resolutions
to see what you get. Allthough it's a rather old effect, it still is good
enough to put in demos when you use it clever enough. I know this text is
a bit cryptic but once you've experimented with the source, all will become
clear. Trust me ... I know ... :-)
Ok, this is all for now. Happy coding!
-Vulture/Outlaw Triad-
───────────────────────────────■ Distro Sites ■────────────────────────────────
Call our distrobution sites! All our releases are available at:
BlueNose World HQ +31 (0)345-619401
The Force Distrosite +31 (0)36-5346967 More distros wanted!
Bugs'R'Us Distrosite +31 (0)252-686092 (preferably outside
MagicWare Italian HQ +39 6-52355532 of The Netherlands)
ShockWave South African HQ +27 (011)888-6345
Society HQ United States HQ +1 (518)465-6721
Also check the major FTP sites for Outlaw Triad productions.
──────────────────────────────────■ Contact ■──────────────────────────────────
Want to contact Outlaw Triad for some reason? You can reach us at our
distrosites in Holland. Or if you have e-mail access, mail us:
Vulture (coder/pr) comma400@tem.nhl.nl
Our internet homepage:
http://www.tem.nhl.nl/~comma400/vulture.html
These internet adresses should be valid at least till june 1997.
──────────────────────────────────────────────────────────────────────────────
Quote: It is dangerous to be sincere unless you are also stupid.